package com.leetcode_Onequestion;

/**
 * @Author jsh
 * @Date 2023/3/19 12:43
 * @Version 1.0
 */

import java.util.Arrays;

/**
 * 题目描述：
 * 给你一个字符串 s 以及两个整数 a 和 b 。其中，字符串 s 的长度为偶数，且仅由数字 0 到 9 组成。
 *
 * 你可以在 s 上按任意顺序多次执行下面两个操作之一：
 *
 * 累加：将  a 加到 s 中所有下标为奇数的元素上（下标从 0 开始）。数字一旦超过 9 就会变成 0，如此循环往复。例如，s = "3456" 且 a = 5，则执行此操作后 s 变成 "3951"。
 * 轮转：将 s 向右轮转 b 位。例如，s = "3456" 且 b = 1，则执行此操作后 s 变成 "6345"。
 * 请你返回在 s 上执行上述操作任意次后可以得到的 字典序最小 的字符串。
 *
 * 如果两个字符串长度相同，那么字符串 a 字典序比字符串 b 小可以这样定义：在 a 和 b 出现不同的第一个位置上，字符串 a 中的字符出现在字母表中的时间早于 b 中的对应字符。例如，"0158” 字典序比 "0190" 小，因为不同的第一个位置是在第三个字符，显然 '5' 出现在 '9' 之前。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/lexicographically-smallest-string-after-applying-operations
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class leetcode_1625 {
    public static void main(String[] args) {
        /*System.out.println("123eww".compareTo("2"));
        System.out.println("123".compareTo("124"));
        System.out.println("123".compareTo("123"));
        char[] s = "123".toCharArray();*/

        System.out.println(findLexSmallestString("5525", 9, 2));

    }
    public static String findLexSmallestString(String s, int a, int b) {
        int l = s.length();
        //初始化返回值
        String res = s;
        s = s + s;
        //移动之后，首数字索引对应的值赋值为true
        boolean[] b1 = new boolean[l];
        for (int i = 0; !b1[i]; i = (i + b) % l) {
            b1[i] = true;


            for (int j = 0; j < 10; j++) {
                int kLimit = b % 2 == 0 ? 0 : 9;

                for (int k = 0; k <= kLimit; k++) {
                    char[] sChar = s.substring(i, l + i).toCharArray();
                    for (int m = 0; m < l; m += 2) {
                        sChar[m] = (char) ('0' + (sChar[m] - '0' + k * a) % 10);
                    }
                    for (int m = 1; m < l; m += 2) {
                        sChar[m] = (char) ('0' + (sChar[m] - '0' + j * a) % 10);
                    }

                    String s1 = new String(sChar);
                    if (s1.compareTo(res) < 0){
                        res = s1;
                    }
                }

            }
        }
        return res;
    }
}
